;; start or modify looper
(define-macro (:> tag . args)
(let ((tagtime (string->symbol (string-append (symbol->string tag) "_tagtime"))))
(if (not (defined? tagtime)) (eval `(define ,tagtime (now)) (interaction-environment)))
(if (< (eval tagtime) (- (now) (* 2 *second*)))
(eval `(define ,tag #f) (interaction-environment)))
(if (and (defined? tag) (closure? (eval tag)))
`(rmap-loop-runner ,tag ,tagtime modify ,@args)
`(rmap-loop-runner ,tag ,tagtime start ,@args))))